The & and | logical operators do
short-circuit logic. That is, they stop processing their
arguments when it's clear what the result of the operation will
be. For instance, if one of the arguments of an
& evaluates to false, there's no
point in evaluating the rest of the arguments. This means that
you should put slow matches (‘body’, ‘header’) last and quick matches
(‘from’,
‘subject’)
first.
The indirection arguments (1- and so on) will
make their arguments work on previous generations of the thread.
If you say something like:
...
(1-
(1-
("from" "lars")))
...
Then that means “score on the from header of the grandparent of the current article”. An indirection is quite fast, but it's better to say:
(1-
(&
("from" "Lars")
("subject" "Gnus")))
than it is to say:
(&
(1- ("from" "Lars"))
(1- ("subject" "Gnus")))